Objetivo de la sesión
El ejercicio de esta sesión pretende afianzar los conocimientos y habilidades para
Organizar y limpiar los datos
Pegar bases de datos
Crear variables
Visualización interactiva
Aplicación: emisiones de GEI, comparativo entre paises
El cambio climático de origen antropogénico se debe a la emsión de gases efecto invernadero (CO2, metano, oxido nitroso, otros). Vaya acá para una explicación de cada uno de ellos. A nivel global, la quema de combustibles fósiles para transporte y energía es la fuente de emisiones más importante. En Colombia, una contribución importante es la deforestación, ver algunas cifrás acá. Casi todos los paises del mundo se han comprometido a reducir sus emisiones, con el objetivo global de evitar el aumento de la temperatura continental promedio por encima de \(2^oC\) en relación los niveles pre-industriales META.
Nuestras preguntas son las siguientes
¿Cuáles son los paises que emiten más GEI?
¿Cuáles son los paises que emiten más GEI en términos per cápita?
¿Cuál es la relación entre el ingreso y las emisiones?
¿Cómo han evolucionado las emisiones totales globales en las dos últimas décadas?
¿Ha aumentado la eficiencia energética de la producción?
Datos
Usaremos los datos provistos por el Banco Mundial a través de los World Development Indicators. En el REPO descargue las bases WDI_CO2.xlsx y gdp_percapital.xlsx
Paso a paso
- Cargue los datos
- Dejar los datos a punto para analizar
2.1 Ajustar los nombres de las columnas
Es recomendable que las columnas tengan nombres sencillos, cortos, y de fácil recordación o identificación. Empezaremos con los datos WDI. Cambiaremos los nombres de las columnas iniciales, y le quitamos el [YR…] a las columnas de año.
colnames(wdi)[2]<-"serie"
colnames(wdi)[3]<-"country"
colnames(wdi)[4]<-"ccode"
colnames(wdi)[5]<-1997
#Para no hacerlo año por año, usamos un loop
i<-5
while (i <29){
i<-i+1
colnames(wdi)[i]<-1997+i-5
}
La columna serie contiene las variables que nos interesa analizar. Les asignamos nombres cortos y de fácil recordación (para mí al menos). Haremos un condicional anidado, es decir, un ifelse dentro de otro ifelse
library(tidyverse)
wdi<-wdi%>%mutate(variable=ifelse(serie=="EN.ATM.GHGT.KT.CE","total_ghg",ifelse(serie=="EN.ATM.CO2E.KT","total_co2",
ifelse(serie=="EN.ATM.CO2E.PP.GD.KD","co2_pib",
ifelse(serie=="SP.POP.TOTL","pop","")))))
Note que la base de datos está en formato ancho. Para el análisis es mejor el formato largo. Antes de hacer el reshape eliminamos las columnas innecesarias
wdi<-wdi%>%select(-c(`Series Name`,serie,))
2.2 Cambiar la orientación de los datos: wide to long
Para hacer el cambio de ancho a largo, lo haremos en dos pasos. Antes de hacerlo en código, dibuje en una hoja como desea que quede estructurada su base de datos.
# Paso 1
wdi<-wdi%>%pivot_longer(!c(country,ccode,variable),names_to="year",values_to="value")
wdi<-wdi%>%filter(!is.na(country)) # eliminamos los valores missing para la columna country
# Paso 2
wdi1<-wdi%>%pivot_wider(id_cols=c(country,ccode,year),names_from=variable,values_from=value)
Note que en sus datos aparecen celdas que contienen dos puntos (..). Estos son valores perdidos, missing, así que debemos declararlos adecuadamente para que los entienda como tal
wdi1[wdi1==".."]<-NA
Finalmente, debemos asegurarnos que los datos están en la calse que corresponde a la característica de la variable. Es decir, que las variables cuantitativas sean reconocidas como numéricas, por ejemplo. Veamos la clase de cada variable
class(wdi$year) # Si lo hacemos para una sola columna
[1] "character"
sapply(wdi1,class) # si lo hacemos para todas las columnas
country ccode year total_ghg total_co2 co2_pib
"character" "character" "character" "character" "character" "character"
pop
"character"
Note que las variables están como character, pero las necesitamos como numéricas, pues son de carácter cuantitativo
wdi1<-wdi1%>%mutate(total_ghg=as.numeric(total_ghg)) #Así lo hacemos columna por columna
class(wdi1$total_ghg)
[1] "numeric"
i<-c(3:7)
wdi1[,i]<-apply(wdi1[,i],2,function(x)as.numeric(x)) # así hacemos todas las columnas de una vez
sapply(wdi1,class)
country ccode year total_ghg total_co2 co2_pib
"character" "character" "numeric" "numeric" "numeric" "numeric"
pop
"numeric"
Nuestros datos de esta base ya quedaron listos. Hay que hacer los mismos ajustes para la base gdp. Ya sabe coo enfrentarlo.
2.3 Pegar las bases de datos
Queremos pegar la base gdp a la base wdi para ello debemos determinar las variables que identifican una observación única y que son comunes en las dos bases de datos. Es decir, las llaves. En este caso, note que la combinación ccode year definen una única observación que es común entre las bases de datos.
Para hacer esto tenemos varias posibilidades. Está la función merge y la función join. Usaremos esta última. Ustede debe practicar y replciar el resultado usando merge
wdi1<-left_join(wdi1,gdp,by=c("ccode","year","country"))
Ya tenemos la base completa.
Paso 3 Analizar los datos
- Pregunta 1 ¿Cuáles son los paises que emiten más GEI?
Vamos a calcularlo para el año 2019, que es el último para el cual tenemos datos. Graficaremos usando plotly
library(plotly)
ghg.plot<-wdi1%>%filter(year==2019)%>%plot_ly(y=~total_ghg,x=~ccode,type="bar",name="Total")
ghg.plot
Ordenemos las barras en forma descendente
ghg.plot<-ghg.plot%>%
layout(xaxis=list(categoryorder="total descending"))
ghg.plot
- Pregunta 2 ¿Cuáles son los paises que emiten más GEI en términos per cápita?
Cree la variable de emisiones per cápita usando las variables total_ghg y pop. Luego grafique con orden descendente
- Pregunta 3 ¿Cuál es la relación entre el ingreso y las emisiones?
gy<-wdi1%>%filter(year==2019)%>%plot_ly(x=~gdp,y=~ghgpc,type="scatter", text=~ccode)
gy
- Pregunta 4 ¿Cómo han evolucionado las emisiones totales globales en las dos últimas décadas?
Para esto debemos calcular las emisiones totales por año. En cada año hacemos la suma. Para ello agruparemos los datos por año, usando la función group_by()
total<-wdi1%>%group_by(year)%>%summarise(total=sum(total_ghg,na.rm=TRUE))
ghgtot.plot<-total%>%plot_ly(x=~year,y=~total,type="scatter",mode="lines")
ghgtot.plot
Podemos colocar nuestras 4 gráficas en un solo gráfico
subplot(ghg.plot,ghgpc,gy,ghgtot.plot,nrows=2)